/**
 * 
 */

package com.gustozzi.distribucion.action;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.gustozzi.distribucion.action.util.Constantes;
import com.gustozzi.distribucion.negocio.SolicitudTransporteBO;
import com.gustozzi.distribucion.negocio.TransporteBO;
import com.gustozzi.distribucion.negocio.impl.SolicitudTransporteBOImpl;
import com.gustozzi.distribucion.negocio.impl.TransporteBOImpl;
import com.gustozzi.domain.Despacho;
import com.gustozzi.domain.SolicitudTransporte;
import com.gustozzi.domain.Transporte;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * @author FABRIZIO
 * 
 */
public class SolicitudTransporteAction extends ActionSupport implements ServletRequestAware
{
    private static final long serialVersionUID = 1L;
    TransporteBO transporteBO = new TransporteBOImpl();
    private String botonSeleccionado;
    private HttpServletRequest request;
    private SolicitudTransporte solicitudTransporte;
    private List<SolicitudTransporte> listaSolicitud;
    private String codigoSeleccionado;
    private List<Despacho> listaDespachos;
    SolicitudTransporteBO solicitudtransporteBO = new SolicitudTransporteBOImpl();
    private List<SolicitudTransporte> listaSolicitudTransporte;
    private SolicitudTransporte solicitudtransporteBusqueda;
    private ActionContext context;
    private Map<String, Object> appCon;
    private String codigoSolicitud;
    private boolean indicadorConsulta;

    public boolean isIndicadorConsulta()
    {
        return indicadorConsulta;
    }

    public void setIndicadorConsulta(boolean indicadorConsulta)
    {
        this.indicadorConsulta = indicadorConsulta;
    }

    public String getCodigoSolicitud()
    {
        return codigoSolicitud;
    }

    public void setCodigoSolicitud(String codigoSolicitud)
    {
        this.codigoSolicitud = codigoSolicitud;
    }

    private List<Transporte> listaTransporte;

    public List<Transporte> getListaTransporte()
    {
        return listaTransporte;
    }

    public void setListaTransporte(List<Transporte> listaTransporte)
    {
        this.listaTransporte = listaTransporte;
    }

    public String execute()
    {
        String destino = Constantes.CADENA_VACIA;
        if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_FILTRAR))
        {
            destino = obtenerListaSolicitud();
        }

        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_REPORTE))
        {
            destino = null;
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_NUEVO))
        {
            destino = nuevaSolicitud();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_EDITAR))
        {
            destino = editarDespacho();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_VERDESPACHO))
        {
            destino = verDespacho();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_GUARDAR))
        {
            destino = guardarTransporte();
        }

        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_ELIMINAR))
        {
            destino = eliminarSolicitud();
        }
        else
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    public String editarDespacho()
    {
        String destino = "";

        try
        {

            context = ActionContext.getContext();
            appCon = context.getApplication();
            listaSolicitudTransporte = (List<SolicitudTransporte>) appCon.get("listaSolicitudTransporte");

            String codigoSolicitud = codigoSeleccionado;

            for (int x = 0; x < listaSolicitudTransporte.size(); x++)
            {

                if (listaSolicitudTransporte.get(x).getCodigo().equals(codigoSolicitud))
                {
                    solicitudtransporteBusqueda = listaSolicitudTransporte.get(x);

                }
            }

            destino = "NUEVASOLICITUDTRANSPORTE";

        }
        catch (Exception e)
        {
            destino = "ERROR";
        }
        return destino;
    }

    public String eliminarSolicitud()
    {
        String destino = Constantes.CADENA_VACIA;
        String respuesta;
        String codigoSolicitud = codigoSeleccionado;
        System.out.println("codSol" + codigoSolicitud);
        try
        {
            respuesta = solicitudtransporteBO.eliminarSolicitud(codigoSolicitud);

            if (respuesta.equalsIgnoreCase("OK"))
            {
                destino = "CONSULTARSOLICITUDTRANSPORTE";
            }
            else
            {
                destino = Constantes.ERROR;
            }
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    public String detalleSolicitud()
    {
        String destino = "";
        List<Transporte> listaTransporte = null;
        try
        {

            context = ActionContext.getContext();
            appCon = context.getApplication();
            listaSolicitudTransporte = (List<SolicitudTransporte>) appCon.get("listaSolicitudTransporte");

            System.out.println("LISTASETEADA");

            this.setListaSolicitudTransporte(listaSolicitudTransporte);

            codigoSolicitud = "1";
            listaTransporte = solicitudtransporteBO.obtenerDetalleSolicitud(listaSolicitudTransporte, codigoSolicitud);
            System.out.println("listaTransporte>>>" + listaTransporte.size());
            this.setListaTransporte(listaTransporte);

            context = ActionContext.getContext();
            appCon = context.getApplication();
            appCon.put("listaTransporte", listaTransporte);
            destino = "REPORTEDETALLE";

            System.out.println("destino" + destino);
        }
        catch (Exception e)
        {
            destino = "ERROR";
        }
        return destino;
    }

    public String guardarTransporte()
    {
        String destino = Constantes.CADENA_VACIA;
        String respuesta = Constantes.CADENA_VACIA;

        try
        {

            String codigo = solicitudtransporteBusqueda.getCodigo();
            SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd/MM/yyyy");
            String fechaCreacion = sdf.format(solicitudtransporteBusqueda.getFechaCreacion()).toString();
            String desSolicitud = solicitudtransporteBusqueda.getDescSolicitud();
            String peso = solicitudtransporteBusqueda.getPeso();
            String fechaReq = sdf.format(solicitudtransporteBusqueda.getFechaSolicitud()).toString();

            respuesta = solicitudtransporteBO.guardarSolicitudTransporte(codigo, fechaCreacion, desSolicitud, peso,
                    fechaReq);

            if (respuesta.equalsIgnoreCase(Constantes.ERROR))
            {
                destino = Constantes.ERROR;
            }
            else
            {

                destino = Constantes.CONSULTARSOLICITUDTRANSPORTE;
                solicitudtransporteBusqueda = new SolicitudTransporte();
            }
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    public String obtenerListaSolicitud()
    {
        String destino = "";
        List<SolicitudTransporte> lista = null;
        try
        {

            System.out.println("Inicio CRITERIOS");
            String codigoSolicitud = solicitudtransporteBusqueda.getCodigo();
            String placa = "";
            String codigoCentroDistribucion = solicitudtransporteBusqueda.getCentro().getCodigo();
            String codigoDespacho = solicitudtransporteBusqueda.getDespacho().getCodigo();
            String fechaDesde = solicitudtransporteBusqueda.getFechaDesde();
            String fechaHasta = solicitudtransporteBusqueda.getFechaHasta();
            System.out.println("FIN CRITERIOS");
            lista = new ArrayList<SolicitudTransporte>();

            lista = solicitudtransporteBO.obtenerListaSolicitudTransporte(codigoSolicitud, codigoCentroDistribucion,
                    codigoDespacho, placa, fechaDesde, fechaHasta);
            System.out.println("LISTA SIZE" + lista.size());
            this.setListaSolicitudTransporte(lista);
            if (lista.size() > 0)
                indicadorConsulta = false;
            else
                indicadorConsulta = true;
            System.out.println("indicadorConsulta" + indicadorConsulta);
            context = ActionContext.getContext();
            appCon = context.getApplication();
            appCon.put("listaSolicitudTransporte", listaSolicitudTransporte);
            destino = Constantes.CONSULTARSOLICITUDTRANSPORTE;

        }
        catch (Exception e)
        {
            destino = "ERROR";
        }
        return destino;
    }

    public String nuevaSolicitud()
    {
        solicitudtransporteBusqueda.setCodigo("TEMP");
        String destino = Constantes.NUEVASOLICITUDTRANSPORTE;
        return destino;
    }

    public String verDespacho()
    {
        String destino = Constantes.CADENA_VACIA;
        try
        {
            request.getSession().setAttribute("ORIGENDESPACHO", "SOLICITUDTRANSPORTE");
            destino = Constantes.VERDESPACHO;
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    @Override
    public void setServletRequest(HttpServletRequest request)
    {
        this.request = request;
    }

    /**
     * @return the botonSeleccionado
     */
    public String getBotonSeleccionado()
    {
        return botonSeleccionado;
    }

    /**
     * @return the solicitudTransporte
     */
    public SolicitudTransporte getSolicitudTransporte()
    {
        return solicitudTransporte;
    }

    /**
     * @return the listaSolicitud
     */
    public List<SolicitudTransporte> getListaSolicitud()
    {
        return listaSolicitud;
    }

    /**
     * @return the codigoSeleccionado
     */
    public String getCodigoSeleccionado()
    {
        return codigoSeleccionado;
    }

    /**
     * @return the listaDespachos
     */
    public List<Despacho> getListaDespachos()
    {
        return listaDespachos;
    }

    /**
     * @param botonSeleccionado
     *            the botonSeleccionado to set
     */
    public void setBotonSeleccionado(String botonSeleccionado)
    {
        this.botonSeleccionado = botonSeleccionado;
    }

    /**
     * @param solicitudTransporte
     *            the solicitudTransporte to set
     */
    public void setSolicitudTransporte(SolicitudTransporte solicitudTransporte)
    {
        this.solicitudTransporte = solicitudTransporte;
    }

    /**
     * @param listaSolicitud
     *            the listaSolicitud to set
     */
    public void setListaSolicitud(List<SolicitudTransporte> listaSolicitud)
    {
        this.listaSolicitud = listaSolicitud;
    }

    /**
     * @param codigoSeleccionado
     *            the codigoSeleccionado to set
     */
    public void setCodigoSeleccionado(String codigoSeleccionado)
    {
        this.codigoSeleccionado = codigoSeleccionado;
    }

    /**
     * @param listaDespachos
     *            the listaDespachos to set
     */
    public void setListaDespachos(List<Despacho> listaDespachos)
    {
        this.listaDespachos = listaDespachos;
    }

    public List<SolicitudTransporte> getListaSolicitudTransporte()
    {
        return listaSolicitudTransporte;
    }

    /**
     * @param listaDespachos
     *            the listaDespachos to set
     */
    public void setListaSolicitudTransporte(List<SolicitudTransporte> listaSolicitudTransporte)
    {
        this.listaSolicitudTransporte = listaSolicitudTransporte;
    }

    public SolicitudTransporte getSolicitudtransporteBusqueda()
    {
        return solicitudtransporteBusqueda;
    }

    public void setSolicitudtransporteBusqueda(SolicitudTransporte solicitudtransporteBusqueda)
    {
        this.solicitudtransporteBusqueda = solicitudtransporteBusqueda;
    }

}